﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Data.OleDb;
using DAO;
using DTO;
using BUS;

namespace QL_xxx
{
    /// <summary>
    /// Interaction logic for LapPhieuThuePhong.xaml
    /// </summary>
    public partial class LapPhieuThuePhong : Window
    {
        public event OnLapPhieuThuePhongThanhCong onLapPhieuThueThanhCong;
        private PhongDTO phong;
        public LapPhieuThuePhong(string _tenPhong)
        {
            this.InitializeComponent();
            phong = PhongBUS.LayDSPhong(-1, _tenPhong)[0];
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            txtTenPhong.Text = phong.TenPhong;
            btnLapPhieu.IsEnabled = false;
            
        }

        private void btnThoat_Click(object sender, RoutedEventArgs e)
        {
            if (MessageBoxResult.Yes == MessageBox.Show("Bạn có chắc muốn thoát, thông tin sẽ không được lưu!", "Thông báo.", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No))
                this.Close();
        }

        private void txtSoLuongKhach_TextChanged(object sender, TextChangedEventArgs e)
        {
            int o = 0;
            if (txtSoLuongKhach.Text.Trim().Length == 0)
            {
                errorSL.Foreground = Brushes.Red;
                errorSL.Text = "Bạn phải điền số lượng vào đây.";
            }
            else

                if (!int.TryParse(txtSoLuongKhach.Text, out o))
                {
                    errorSL.Foreground = Brushes.Red;
                    errorSL.Text = "Đơn giá phải là số nguyên.";
                }
                else
                {
                    errorSL.Text = "OK";
                    errorSL.Foreground = Brushes.Green;
                }
        }

        private void txtCMNDPassport_TextChanged(object sender, TextChangedEventArgs e)
        {
            int o = 0;
            if (txtCMNDPassport.Text.Trim().Length == 0)
            {
                errorCMND.Foreground = Brushes.Red;
                errorCMND.Text = "Bạn phải điền CMND/Passport vào đây.";
            }
            else

                if (!int.TryParse(txtCMNDPassport.Text, out o))
                {
                    errorCMND.Foreground = Brushes.Red;
                    errorCMND.Text = "CMND/Passport phải là số nguyên.";
                }
                else
                {
                    errorCMND.Text = "OK";
                    errorCMND.Foreground = Brushes.Green;
                }
        }


        private void txtTenKH_TextChanged(object sender, TextChangedEventArgs e)
        {
            if (txtTenKH.Text.Trim().Length == 0)
            {
                errorTenKH.Foreground = Brushes.Red;
                errorTenKH.Text = "Bạn phải điền tên phòng vào đây.";
            }
            else
            {
                errorTenKH.Text = "OK";
                errorTenKH.Foreground = Brushes.Green; ;
            }
        }

        private void txtNgaySinh_TextChanged(object sender, TextChangedEventArgs e)
        {
            if (txtNgay.Text.Trim().Length == 0 || txtThang.Text.Trim().Length == 0 || txtNam.Text.Trim().Length == 0)
            {
                errorNgaySinh.Foreground = Brushes.Red;
                errorNgaySinh.Text = "Bạn phải điền ngày sinh vào đây.";
            }
            else
                if (!Date.KiemTraNgaySinh(txtNgay.Text,txtThang.Text,txtNam.Text))
                {
                    errorNgaySinh.Foreground = Brushes.Red;
                    errorNgaySinh.Text = "Ngày sinh không hợp lệ.";
                }
                else
                {
                    errorNgaySinh.Text = "OK";
                    errorNgaySinh.Foreground = Brushes.Green; ;
                }
        }

        
        private void errorSL_TextChanged(object sender, TextChangedEventArgs e)
        {
            CheckError();
        }

        private void errorTenKH_TextChanged(object sender, TextChangedEventArgs e)
        {
            CheckError();
        }

        private void errorNgaySinh_TextChanged(object sender, TextChangedEventArgs e)
        {
            CheckError();
        }

        private void errorCMND_TextChanged(object sender, TextChangedEventArgs e)
        {
            CheckError();
        }
        private void CheckError()
        {
            if (string.Compare(errorSL.Text, "OK") == 0
                && string.Compare(errorTenKH.Text, "OK") == 0
                && string.Compare(errorNgaySinh.Text, "OK") == 0
                && string.Compare(errorCMND.Text, "OK") == 0)
                btnLapPhieu.IsEnabled = true;
            else
                btnLapPhieu.IsEnabled = false;
        }

        private void btnLapPhieu_Click(object sender, RoutedEventArgs e)
        {
            KhachHangDTO kh = new KhachHangDTO();
            kh.HoTen = txtTenKH.Text;
            kh.NgaySinh = DateTime.Parse(txtThang.Text + "/" + txtNgay.Text + "/" + txtNam.Text);
            kh.Cmnd_Passport = txtCMNDPassport.Text;
            kh.LaKhachTrongNuoc = radTrongNuoc.IsChecked == true ? true : false;

            int themKH = KhachHangBUS.ThemKhachHang(kh);
            switch (themKH)
            {
                case KhachHangBUS.ChuaDuTuoi:
                    {
                        MessageBox.Show("Khách hàng chưa đủ tuổi thuê phòng.", "Lỗi", MessageBoxButton.OK, MessageBoxImage.Error);
                        return;
                    }
                case KhachHangBUS.TrungCMND_PassPost:
                    {
                        //khach hang da ton tai roi, thong bao xac nhan
                        KhachHangDTO khCu = KhachHangBUS.LayDSKhachHang(-1, null, kh.Cmnd_Passport)[0];
                        if (MessageBox.Show("CMND/Passport bạn vừa nhập trùng với 1 khách hàng cũ có thông tin:\n"
                        + "Họ tên: {0}, Ngày sinh: {1} \n".Replace("{0}", khCu.HoTen).Replace("{1}", khCu.NgaySinh.ToShortDateString())
                        + "Chọn 'Yes' để lấy thông tin khách hàng cũ,'No' để nhập lại'", "Thông báo",
                        MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
                        {
                            kh = khCu;
                        }
                        else
                        {
                            return;
                        }
                        break;
                    }
                case KhachHangBUS.ThanhCong:
                    {
                        kh = KhachHangBUS.LayDSKhachHang(-1, null, kh.Cmnd_Passport)[0];// lay de xac minh ma kh trong csdl
                        break;
                    }
                case KhachHangBUS.thatBai:
                    {
                        MessageBox.Show("Lỗi trong quá trình lưu thông tin khách hàng, vui lòng liên hệ nhà cung cấp.", "Lỗi", MessageBoxButton.OK, MessageBoxImage.Error);
                        return;
                    }
            }
            PhieuThuePhongDTO phieuThue = new PhieuThuePhongDTO();
            phieuThue.MaKhachHang = kh.MaKhachHang;
            phieuThue.MaPhong = phong.MaPhong;
            phieuThue.NgayThue = DateTime.Today;
            phieuThue.SoLuongKhach = int.Parse(txtSoLuongKhach.Text);

            int thue = PhieuThuePhongBUS.LapPhieuThuePhong(phieuThue);
            switch (thue)
            {
                case PhieuThuePhongBUS.vuotQuaSoKhachQuyDinh:
                    {
                        MessageBox.Show("Vượt quá số khách quy định.", "Lỗi", MessageBoxButton.OK, MessageBoxImage.Error);
                        break;
                    }
                case PhieuThuePhongBUS.thatBai:
                    {
                        MessageBox.Show("Lỗi chưa xác định, vui lòng liên hệ nhà cung cấp.", "Lỗi", MessageBoxButton.OK, MessageBoxImage.Error);
                        break;
                    }
                case PhieuThuePhongBUS.thanhCong:
                    {
                        PhieuThuePhongDTO phieu = PhieuThuePhongBUS.LayDSPhieuThuePhong(-1, -1, -1,-1, phong.MaPhong)[0];
                        phong.TrangThai = phieu.MaPhieuThuePhong;
                        int n = PhongBUS.SuaPhong(phong);
                        if (n == PhongBUS.suaPhongOK)
                        {
                            MessageBox.Show("Xong", "Lập phiếu thành công", MessageBoxButton.OK, MessageBoxImage.Information);
                            onLapPhieuThueThanhCong();
                            this.Close();
                        }
                        else
                        {
                            MessageBox.Show("Lỗi cập nhật phòng khi lập phiếu thuê, vui lòng liên hệ nhà cung cấp.", "Lỗi", MessageBoxButton.OK, MessageBoxImage.Error);
                            break;
                        }
                        break;
                        
                    }
            }
        }





        



    }
}